import BaseController from "../../base/baseController.js";
import GoodsItemModel from "../model/goodsItemModel.js";

/**
 * @description 购物车商品列表控制器
 * @class {GoodsItemController}
 * @extends {BaseController} 基础控制器
 * @author hhx
 * @date 2024-12-1 20:12
 * @version 0.1.2
 */
export default class GoodsItemController extends BaseController {

    /**
     * @description 购物车列表控制器
     * @public
     * @constructor
     * @param props {Object} 配置对象
     */
    constructor(props) {
        super(props);
    }

    /**
     * @description 实例化 商品列表控制器
     * @public
     * @static
     * @param props {object} 配置对象
     * @returns {GoodsItemController|*}  商品列表控制器
     */
    static instance(props = {}) {
        let instance = new GoodsItemController(props);
        instance.init(props);
        return instance;
    }

    //=========================== 内部成员 ===============================

    //=========================== 成员方法 ===============================

    //=========================== 基础属性 ===============================

    //=========================== 属性方法 ===============================

    //=========================== 构建方法 ===============================

    /**
     * @description 重载方法
     * @protected
     * @override
     */
    init(props) {

        super.init(props);

        //初始化模型
        this.initModel();

        //初始化视图
        // this.initDom();

        //初始化事件订阅
        // this.initEventSubscribe();

    }


    //=========================== 重载方法 ===============================

    //=========================== 内部方法 ===============================

    /**
     * @description 初始化模型
     * @protected
     */
    initModel() {
        this.setModel(this.createModel());
    }

    /**
     * @description 初始化事件订阅
     * @protected
     */
    initEventSubscribe() {
        this.subscriberAddProductToShop();
    }

    /**
     * @description 初始化视图
     * @protected
     */
    initDom() {
        this.createDom();
    }

    //=========================== 创建方法 ===============================

    /**
     * @description 创建模型
     * @protected
     * @returns {GoodsItemModel} 购物车列表模型
     */
    createModel() {
        return GoodsItemModel.instance();
    }

    /**
     * @description 创建模型
     * @protected
     * @returns {HTMLElement} 视图元素
     */
    createDom() {
        return document.createElement('div');
    }

    //=========================== 控制方法 ===============================

    //=========================== 事件订阅 ===============================


    //=========================== 事件触发 ===============================

    /**
     * @description 触发 添加商品到购物车
     * @protected
     */
    triggerAddProductToShop(product) {
        this.model.addProductToShop(this, product);
    }

    //=========================== 处理函数 ===============================

    /**
     * @description 处理 添加商品到购物车事件
     * @protected
     */
    handleAddProductToShop(product) {
        console.log(product, '添加商品');
    }

    //=========================== 接口方法 ===============================

    /**
     * @description 添加商品到购物车
     * @public
     * @param product {ProductModel} 商品对象
     */
    addProductToShop(product) {
        this.triggerAddProductToShop(product);
    }

    /**
     * @description 获取店铺商品列表
     * @public
     */
    getProductToShop() {
        return this.model.getProductToShop();
    }


}






